/*
 * CCompartirPistaAlbum.cpp - Grupo 5 - Prog. Avanzada 2011
 *
 *  Javier Dominguez - 4.901.161-6
 *  Marcelo Parada - 1.977.094-9
 *  Rodrigo Ruiz - 4.481.611-2
 *  Maximiliano Silvera - 4.106.938-6
 */

#include "CCompartirPistaAlbum.h"

CCompartirPistaAlbum::CCompartirPistaAlbum()
{
}

ColConcrete<AlbumDT*> *CCompartirPistaAlbum::obtenerListadoAlbumes()
{
	return HElemento::getInstance()->obtenerListadoAlbumes();
}

AlbumDT *CCompartirPistaAlbum::obtenerAlbum(string nombre)
{
	Album *album = HElemento::getInstance()->obtenerAlbum(nombre);

	return new AlbumDT(album->getNombre(), album->getAnioEdicion());
}

void CCompartirPistaAlbum::crearArtista(ArtistaDT *artistaDT)
{
	if(HElemento::getInstance()->obtenerArtista(artistaDT->getNombre()) != NULL)
	{
		throw string("Ya existe un artista con ese nombre.");
	}

	HElemento::getInstance()->crearArtista(artistaDT);
}

int CCompartirPistaAlbum::crearPista(PistaDT *pistaDT)
{
	if(HElemento::getInstance()->obtenerPista(pistaDT->getId()) != NULL)
	{
		throw string("Ya existe una pista con este nombre.");
	}

	return HElemento::getInstance()->crearTema(pistaDT);
}


void CCompartirPistaAlbum::crearAlbum(AlbumDT *albumDT)
{
	if(HElemento::getInstance()->obtenerAlbum(albumDT->getNombre()) != NULL)
	{
		throw string("Ya existe un album con ese nombre");
	}

	HElemento::getInstance()->crearAlbum(albumDT);
}

void CCompartirPistaAlbum::asociarArtistaAlbum(ArtistaDT *artistaDT, AlbumDT *albumDT)
{
	HElemento::getInstance()->asociarArtistaAlbum(artistaDT, albumDT);
}

void CCompartirPistaAlbum::asociarAlbumPista(AlbumDT *albumDT, PistaDT *pistaDT)
{
	HElemento::getInstance()->asociarAlbumPista(albumDT, pistaDT);
}

void CCompartirPistaAlbum::asociarArtistaTema(ArtistaDT *artistaDT, TemaDT *temaDT)
{
	HElemento::getInstance()->asociarArtistaTema(artistaDT, temaDT);
}

ArtistaDT *CCompartirPistaAlbum::obtenerArtista(string nombre)
{
	Artista *artista = HElemento::getInstance()->obtenerArtista(nombre);

	if(artista != NULL)
	{
		if(artista->tipoArtista() == Solista::TIPO_ARTISTA)
		{
			Solista *solista = (Solista*) artista;

			return new SolistaDT(solista->getNombre());
		}
		else if(artista->tipoArtista() == Banda::TIPO_ARTISTA)
		{
			Banda *banda = (Banda*) artista;

			return new BandaDT(banda->getNombre(), banda->getIntegrantes());
		}
	}

	return NULL;
}

CCompartirPistaAlbum::~CCompartirPistaAlbum()
{
}

